TARGET = brutessh
CC = g++

CFLAGS = -std=c++17 -pedantic -Wconversion -Wall -Wextra -O3
#-pedantic                   # Требует строгого соответствия стандартам C++ и выводит предупреждения на все несоответствия 
#-Wconversion                # Предупреждает об операциях преобразования, которые могут привести к проблемам
#-Wall                       # Включает базовые предупреждения компилятора
#-Werror                     # Преобразует все предупреждения компилятора в ошибки
#-Wextra                     # Включает дополнительные предупреждения
#-O3/-O2/-O1/-O0             # Включает оптимизацию

COLOR_YELLOW = \033[33m
COLOR_GREEN = \033[32m
COLOR_BREAK = \033[0m

DIR_SRC = ./src/
DIR_OBJ = ./obj/

#Список файлов с исходным кодом *.cpp. Перечесляются через пробел
SRC = $(wildcard $(DIR_SRC)*.cpp)

#переименуем файлы удовлетваряющие условию "%.cpp",
#переименуем в "%.o" список этих файлов берём из переменной SRC
OBJ = $(patsubst $(DIR_SRC)%.cpp, $(DIR_OBJ)%.o, $(SRC))
#OBJ = $(SRC:.cpp=$(DIR_OBJ).o)

#бибилиотеки
LIB = -lssh

all: $(TARGET)
	@echo "$(COLOR_GREEN)[+]$(COLOR_BREAK) Linking complete!"


dirs : 
	@mkdir -p obj

#  итог который хотим получить : необходимые зависимости
$(TARGET) : dirs $(OBJ)
	@$(CC) $(CFLAGS) $(OBJ) $(LIB) -o $@

# "$<" - необходимые зависимости "%.cpp"
# "$@" - итоговое значение "%.o"
$(DIR_OBJ)%.o : $(DIR_SRC)%.cpp
	@$(CC) $(CFLAGS) -c $< -o $@
	@echo "$(COLOR_YELLOW)[*]$(COLOR_BREAK) Compiled "$<" successfully!"


clean : 
	@rm $(TARGET) $(DIR_OBJ)*.o
	@echo "$(COLOR_GREEN)[+]$(COLOR_BREAK) Delete $(TARGET) and $(DIR_OBJ)*.o"
